# 思路：
# 维护一个同一值的区间，加入右窗口时，这个区间同一值统一加到右区间，当次数不够时，
# 移除左区间，释放次数（右区间-左区间的值）
from typing import List

class Solution:
    def maxFrequency(self, nums: List[int], k: int) -> int:
        nums.sort()
        # 分配的次数
        cnt=0
        left=0
        ans=0
        for right,x in enumerate(nums):
            # 添加右区间,前面的值变为后面的值，需要多少次数,即 （当前值-前一个值）*前面的区间长度
            if right>=1:
                cnt+=(nums[right]-nums[right-1])*(right-left)
            while cnt>k:
                # 移除左区间,能释放的次数为，当前值-左区间的值
                cnt-=nums[right]-nums[left]
                left+=1
            ans=max(ans,right-left+1)
        return ans